/**
 * @file personne.c
 * @brief Fichier source du module personne.
 *
 * @author Rachid Delory, Mamadou Keita, Florian Bernard
 */

/* *********************************************************************

                       Librairies de personne                          

********************************************************************* */

#include "personne.h"

/* *********************************************************************

                        Fonctions                                      

********************************************************************* */

void init_Per(Personne *per)
{
  if(per)
    {
      per->id = 0;
      per->pays = NULL;
      per->nom = NULL;
      per->prenom = NULL;
      per->nomScene = NULL;
      per->dateNaissance = NULL;
      per->lieuxNaissance = NULL;
      per->dateDeces = NULL;
      per->site = NULL;
      per->biographie = NULL;
      per->maj = 0;
      per->sup = 0;
    }
}

void liberer_Per(Personne *per)
{
  if(per)
    {
      per->id = 0;
      detruire_Pay(&(per->pays));
      free(per->nom);
      free(per->prenom);
      free(per->nomScene);
      detruire_Dat(&(per->dateNaissance));
      free(per->lieuxNaissance);
      detruire_Dat(&(per->dateDeces));
      free(per->site);
      free(per->biographie);
    }
}

void * creer_Per()
{
  Personne *per;
  per = (Personne *) malloc(1 * sizeof(Personne));
  if(per == NULL)
    {
      fprintf(stderr, "Mémoire Insufissantes");
      exit(1);
    }
  init_Per(per);
  return per;
}

void detruire_Per(Personne **per)
{
  if((*per))
    {
      liberer_Per((*per));
      free((*per));
      (*per) = NULL;
    }
}

void copier_Per(Personne **dest, const Personne *src)
{
  if((*dest) == NULL)
    {
      (*dest) = creer_Per();
    }
  if(src)
    {
      (*dest)->id = src->id;
      copier_Pay(&((*dest)->pays), src->pays);
      copier_Uti(&((*dest)->nom), src->nom);
      copier_Uti(&((*dest)->prenom), src->prenom);
      copier_Uti(&((*dest)->nomScene), src->nomScene);
      copier_Dat(&((*dest)->dateNaissance), src->dateNaissance);
      copier_Uti(&((*dest)->lieuxNaissance), src->lieuxNaissance);
      copier_Dat(&((*dest)->dateDeces), src->dateDeces);
      copier_Uti(&((*dest)->site), src->site);
      copier_Uti(&((*dest)->biographie), src->biographie);
    }
  else
    detruire_Per(dest);
}

unsigned int getId_Per(const Personne * ptr)
{
  if(ptr)
    return ptr->id;
  return 0;
}

void setId_Per(Personne *ptr, const unsigned int val)
{
  if(ptr)
    ptr->id = val;
}

Pays * getPays_Per(const Personne * ptr)
{
  if(ptr)
    return ptr->pays;
  return NULL;
}

void setPays_Per(Personne *ptr, const Pays * val)
{
  if(ptr->pays)
    {
      if(!ptr->pays)
	{
	  ptr->pays = creer_Pay();
	}
      if(val)
	copier_Pay(&(ptr->pays), val);
    }
}

char * getNom_Per(const Personne * ptr)
{
  if(ptr)
    return ptr->nom;
  return NULL;
}

void setNom_Per(Personne *ptr, const char * val)
{
  if(ptr)
    {
      copier_Uti(&(ptr->nom), val);
    }
}

char * getPrenom_Per(const Personne * ptr)
{
  if(ptr)
    return ptr->prenom;
  return NULL;
}

void setPrenom_Per(Personne *ptr, const char * val)
{
  if(ptr)
    {
      copier_Uti(&(ptr->prenom), val);
    }
}

char * getNomScene_Per(const Personne * ptr)
{
  if(ptr)
    return ptr->nomScene;
  return NULL;
}

void setNomScene_Per(Personne *ptr, const char * val)
{
  if(ptr)
    {
      copier_Uti(&(ptr->nomScene), val);
    }
}

Date * getDateNaissance_Per(const Personne * ptr)
{
  if(ptr)
    return ptr->dateNaissance;
  return NULL;
}

void setDateNaissance_Per(Personne *ptr, const Date * val)
{
  if(ptr)
    {
      if(!ptr->dateNaissance)
	{
	  ptr->dateNaissance = creer_Dat();
	}
      if(val)
	{
	  copier_Dat(&(ptr->dateNaissance), val);
	}
      else
	detruire_Dat(&(ptr->dateNaissance));
    }
}

char * getLieuxNaissance_Per(const Personne * ptr)
{
  if(ptr)
    return ptr->lieuxNaissance;
  return NULL;
}

void setLieuxNaissance_Per(Personne *ptr, const char * val)
{
 if(ptr)
   {
     copier_Uti(&(ptr->lieuxNaissance), val);
   }
}

Date * getDateDeces_Per(const Personne * ptr)
{
  if(ptr)
    return ptr->dateDeces;
  return NULL;
}

void setDateDeces_Per(Personne *ptr, const Date * val)
{
  if(ptr)
    {
      if(!ptr->dateDeces)
	{
	  ptr->dateDeces = creer_Dat();
	}
      if(val)
	{
	  copier_Dat(&(ptr->dateDeces), val);
	}
      else
	detruire_Dat(&(ptr->dateDeces));
    }
}

char * getSite_Per(const Personne * ptr)
{
  if(ptr)
    return ptr->site;
  return NULL;
}

void setSite_Per(Personne *ptr, const char * val)
{
  if(ptr)
    {
      copier_Uti(&(ptr->site), val);
    }
}

char * getBiographie_Per(const Personne * ptr)
{
  if(ptr)
    return ptr->biographie;
  return NULL;
}

void setBiographie_Per(Personne *ptr, const char * val)
{
  if(ptr)
    {
      copier_Uti(&(ptr->biographie), val);
    }
}

void setMaj_Per(Personne *ptr, const char b)
{
  if(ptr)
    {
      ptr->maj = b;
      if(b == 1)
	ptr->sup = !b;
    }
}

char getMaj_Per(const Personne *ptr)
{
  if(ptr)
    return ptr->maj;
  return 0;
}

void setSup_Per(Personne *ptr, const char b)
{
  if(ptr)
    {
      ptr->sup = b;
      if(b == 1)
	ptr->maj = !b;
    }
}

char getSup_Per(const Personne *ptr)
{
  if(ptr)
    return ptr->sup;
  return 0;
}
